package com.isnotlocus.gulimail.product.valid;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;

//第一个泛型是要的自定义注解校验的类，第二个是校验什么数据类型，因为我们校验的是Integer就写Integer
public class ListValueConstrainvalidator implements ConstraintValidator<ListValue, Integer> {

    private Set<Integer> set = new HashSet<>();

    //初始化方法，可以获取到标注的ListValue里面注解的详细信息
    @Override
    public void initialize(ListValue constraintAnnotation) {
        int[] vals = constraintAnnotation.vals(); //这里就是@ListValue(vals = {0,1}) 标注传过来的值，必须值这些值的其中一项
        for (int i : vals) {
            set.add(i);
        }
    }
    //是否校验通过，false则否，true则是

    /**
     * @param value                      要校验的值
     * @param constraintValidatorContext 要检验的环境信息
     * @return
     */
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
        return set.contains(value);
    }
}
